package com.calvin.study.threadsafe.lock.eightlock;

import java.util.concurrent.TimeUnit;

public class LockTest3 {

	public static void main(String[] args) {
		LockTest3 lt = new LockTest3();

		// 5、增加两个静态的同步方法，只有一个对象，先打印 发短信？打电话？
		//当sync修饰静态方法时，sync锁的是整个类,所以他们使用的是同一把锁
		//lt.test5();
	
		
		//6、两个对象！增加两个静态的同步方法， 先打印 发短信？打电话？
		lt.test6();
	}

	public void test5() {
		Phone3 phone = new Phone3();

		new Thread(() -> {
			phone.sendSms();
		}, "A").start();


		new Thread(() -> {
			phone.call();
		}, "B").start();
	}

	public void test6() {
		//两个对象的class类模板只有一个，修饰static锁的是class
		Phone3 phone = new Phone3();
		Phone3 phone2 = new Phone3();

		new Thread(() -> {
			phone.sendSms();
		}, "A").start();

		new Thread(() -> {
			phone2.call();
		}, "B").start();
	}
}
 
class Phone3 {
	// synchronized 锁的对象是 该方法的调用者！
	public synchronized static void sendSms() {
		System.out.println("发短信");
		try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public synchronized static void call() {
		System.out.println("打电话");
	}
}